package br.com.ava.view.produto;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import br.com.ava.core.infra.excecao.NegocioException;
import br.com.ava.core.produto.Produto;
import br.com.ava.core.produto.ProdutoMediator;
import br.com.ava.view.AplicacaoMB;

@ManagedBean
public class ProdutoMB extends AplicacaoMB {

	@ManagedProperty(value = "#{produtoMediator}")
	private ProdutoMediator produtoMediator;
	private List<Produto> produtos;
	private String filtroNome;

	public ProdutoMB() {
		this.produtos = new ArrayList<Produto>();
	}

	@PostConstruct
	public void init() {
		carregarProdutos();
		validarPermissao();

	}

	public void carregarProdutos() {
		this.produtos = produtoMediator.consultarPorNome(filtroNome);
	}

	public void excluir(ActionEvent event) {
		Integer idProduto = (Integer) event.getComponent().getAttributes()
				.get("idProduto");
		try {
			produtoMediator.excluirPorId(idProduto);
			carregarProdutos();
			adicionarMensagemExclusaoSucesso();
		} catch (NegocioException erro) {
			adicionarMensagemErro(erro.getMensagens());
		}
	}

	public void editar(ActionEvent event) throws IOException {
		Integer idProduto = (Integer) event.getComponent().getAttributes()
				.get("idProduto");
		FacesContext.getCurrentInstance().getExternalContext()
				.redirect("alterar.jsf?idProduto=" + idProduto);
	}

	public ProdutoMediator getProdutoMediator() {
		return produtoMediator;
	}

	public void setProdutoMediator(ProdutoMediator produtoMediator) {
		this.produtoMediator = produtoMediator;
	}

	public List<Produto> getProdutos() {
		return produtos;
	}

	public void setProdutos(List<Produto> produtos) {
		this.produtos = produtos;
	}

	public String getFiltroNome() {
		return filtroNome;
	}

	public void setFiltroNome(String filtroNome) {
		this.filtroNome = filtroNome;
	}

	@Override
	public String perfilPagina() {
		return "funcionario";
	}

}
